#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include<unistd.h>
typedef void(*ptr)();
ptr arr[7]={0};
void test01()
{
    printf("%s\n","this is test01");
}

void  test02()
{
    printf("%s\n","this is test02");
}
void load()
{
    int index =0;
    arr[index++]=test01;
    arr[index++]=test02;
}
int main()
{
    load();
    pid_t id =fork();
    int cnt=10;
    if(id==0)
    {
        while(cnt--)
        {
        printf("I am a child process!!!\n");
        sleep(1);
        }
        exit(7);
    }
    int status=0;
    while(1)
    {
        pid_t ans=waitpid(id,&status,WNOHANG);
        if(ans==id)
        {
            sleep(1);
            printf("wait success!exit code=%d,exit sign=%d\n",(status>>8)&0x000000FF,status&0x0000007F);
            exit(1);
        }
        else if(ans==0)
        {
            //
            for(int i=0;i<2;i++)
            {
                arr[i]();
                sleep(1);
            }
            printf("calling is over,child process is running\n ");
            sleep(1);
        }
        else 
        {
            printf("wait failre!exit code=%d,exit sign=%d\n",(status>>8)&0x000000FF,status&0x0000007F);
            sleep(1);
        }
    }


}
//#include<stdlib.h>
//#include <sys/types.h>
//#include <sys/wait.h>
//#include<unistd.h>
//#include<stdlib.h>
//int main()
//{
//    int status=0;
//    int id =fork();
//    if(id==0)
//    {
//        sleep(5);
//        exit(2);
//    }
//    //is parent
//     waitpid(id,&status,0);
//    if(WIFEXITED(status))//   
//    {
//        printf("wait success!!!\n");
//     //   printf("status=%d\n",WEXITSTATUS(status));
//    printf("status=%d\n",(status>>8)&0X00000FF);
//       
//    }
//
//    return 0;
//}
//
